package com.cu.employmentmanagementsystem.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import com.cu.employmentmanagementsystem.common.exception.CommonException;
import com.cu.employmentmanagementsystem.common.result.R;
import com.cu.employmentmanagementsystem.dto.StudentRecruitmentDTO;
import com.cu.employmentmanagementsystem.entity.StudentInformation;
import com.cu.employmentmanagementsystem.entity.StudentRecruitment;
import com.cu.employmentmanagementsystem.service.StudentInformationService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api(tags = "学生信息管理")
@RequestMapping("/student")
@RestController
@SaCheckLogin
public class StudentInformationController {

    @Autowired
    private StudentInformationService studentInformationService;

    @ApiOperation("获取当前登录学生的个人信息")
    @GetMapping("/getInfo")
    public R<StudentInformation> getInfo() {
        try {
            return R.success(studentInformationService.getInfo());
        } catch (Exception e) {
            return R.error("Failed to get student information");
        }
    }


    @ApiOperation("更新当前登录学生的个人信息")
    @ApiParam(value = "需要更新的学生信息", required = true)
    @PostMapping("/update")
    public R<Boolean> update(@RequestBody @ApiParam(value = "学生信息", required = true) StudentInformation studentInformation) {
        try {
            return R.success(studentInformationService.update(studentInformation));
        } catch (Exception e) {
            return R.error("Failed to update student information");
        }
    }

    // 使用Swagger的@ApiOperation注解来描述这个API的功能
// "查看当前登录学生的简历投递状态" 是这个API的功能描述
    @ApiOperation("查看当前登录学生的简历投递状态")
    @ApiResponses({
            @ApiResponse(code = 200, message = "获取简历投递状态成功", response = StudentRecruitment.class),
            @ApiResponse(code = 500, message = "服务器内部错误，无法获取简历投递状态")
    })
    @GetMapping("/getResumeStatus")
    public R<List<StudentRecruitmentDTO>> getResumeStatus(){
        try {
            // 尝试获取当前登录学生的简历投递状态
            // 假设studentInformationService是一个服务类，它提供了获取简历投递状态的方法
            // 这里调用其getResumeStatus方法并期待返回一个StudentRecruitment对象
            // R是一个通用的响应类，用于封装返回的数据和状态码等信息
            // R.success()是一个静态方法，用于创建一个成功的响应对象，并传入实际的数据
            return R.success(studentInformationService.getResumeStatus());
        } catch (Exception e) {
            // 如果在获取简历投递状态的过程中出现异常
            // 捕获这个异常，并返回一个错误的响应对象
            // R.error()是一个静态方法，用于创建一个错误的响应对象，并传入一个错误消息
            throw  new CommonException("获取简历投递状态失败");
        }
    }
}